package conta;

import excecao.ExcecaoSaqueInvalido;
import excecao.ExcecaoValorNegativo;

public class Especial extends Corrente {

	private static final float TAXA_JUROS = 0.08f;
	private float limite;
	private float valorEmprestado;
	private float jurosCobrados;

	public Especial(int numero, String proprietario, float saldo, float limite) {
		super(numero, proprietario, saldo);
		super.setTarifaManutencao(20);
		this.limite = limite;
		this.valorEmprestado = 0;
		this.jurosCobrados = 0;
	}

	public String listarDados() {
		return super.listarDados() + "\nLimite de credito:" + this.limite
				+ "\nValor emprestado: " + this.valorEmprestado
				+ "\nJuros cobrados: " + this.jurosCobrados;

	}

	public void cobrarJuros() {
		sacar(valorEmprestado * TAXA_JUROS);
		this.jurosCobrados += valorEmprestado * TAXA_JUROS;
	}

	public String getTipoConta() {
		return "ESPECIAL";
	}

	@Override
	public float getSaldo() {
		return ((super.getSaldo() + limite) - valorEmprestado);
	}

	@Override
	public void sacar(float valor) throws ExcecaoSaqueInvalido,
			ExcecaoValorNegativo {

		if (valor > super.getSaldo() && valor <= this.getSaldo()) {
			valorEmprestado += limite - (this.getSaldo() - valor);

			if (valorEmprestado <= limite)
				super.depositar(limite - (limite - valorEmprestado));

		}

		super.sacar(valor);
	}

	@Override
	public void cobrarTarifa() {
		super.cobrarTarifa();
	}
}
